﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ahi.Entity;
using MongoDB.Bson;
using Ahi.Controller;
using DevExpress.XtraScheduler.UI;
using DevExpress.XtraScheduler;
using Ahi.Base;
using System.IO;

namespace Ahi.KomisyonEtkinlik
{
    public partial class EtkinlikEditForm : Base.DuzenleBaseForm
    {
        /// <summary>
        /// Yalnızca scheduler control üzerinden yeni bir etkinliği oluşturmak için gönderilir
        /// </summary>
        public DevExpress.XtraScheduler.Appointment EtkinlikKaydi { get; set; }
        protected EtkinlikEntity entity;
        private List<EtkinlikEntity.EtkinlikTipiEntity> etkinlikTipleri;
        private readonly EtkinlikEntity.EtkinlikTipiEntity yeniEtkinlikTipi = new EtkinlikEntity.EtkinlikTipiEntity { Isim = "[YENİ TİP TANIMLA]" };

        public EtkinlikEntity CurrentEtkinlik
        {
            get
            {
                if (bsData.Current is EtkinlikEntity)
                    return bsData.Current as EtkinlikEntity;
                return null;
            }
        }

        public EtkinlikEditForm()
        {
            InitializeComponent();
        }

        public override void Hazirla()
        {
            editKomisyon.SetDataSource("KomisyonAdi", "Id", MongoAdaptor.Instance.GetData<KomisyonEntity>());
            editDurum.SetEnumList<Ahi.Entity.Enums.EtkinlikDurumu>();
            //editFaaliyetTipi.SetEnumList<Ahi.Entity.Enums.EtkinlikTipleri>();

            EtkinlikTipleriniDoldur();
        }

        private void EtkinlikTipleriniDoldur()
        {
            etkinlikTipleri = MongoAdaptor.Instance.GetData<EtkinlikEntity.EtkinlikTipiEntity>();
            etkinlikTipleri.Add(yeniEtkinlikTipi);

            editFaaliyetTipi.Properties.Items.Clear();
            editFaaliyetTipi.Properties.Items.AddRange(etkinlikTipleri.ToArray());
            editFaaliyetTipi.EditValueChanging += new DevExpress.XtraEditors.Controls.ChangingEventHandler(editFaaliyetTipi_EditValueChanging);
        }

        void editFaaliyetTipi_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            if (!e.NewValue.Equals(yeniEtkinlikTipi)) return;

            string yeni = string.Empty;
            if (GirdiForm.ShowGirdiDialog<string>(ref yeni, "Lütfen Tanımlayacağınız yeni belge tipinin ismini giriniz") == System.Windows.Forms.DialogResult.OK)
            {
                etkinlikTipleri.Add(new EtkinlikEntity.EtkinlikTipiEntity { Isim = yeni });
                etkinlikTipleri.Remove(yeniEtkinlikTipi);
                MongoAdaptor.Instance.Save<EtkinlikEntity.EtkinlikTipiEntity>(etkinlikTipleri);
                editFaaliyetTipi.EditValueChanging -= new DevExpress.XtraEditors.Controls.ChangingEventHandler(editFaaliyetTipi_EditValueChanging);
                EtkinlikTipleriniDoldur();

                //CurrentEtkinlik.EtkinlikTipi = etkinlikTipleri.Where(x => x.Isim == yeni).FirstOrDefault();
                editFaaliyetTipi.EditValue = etkinlikTipleri.Where(x => x.Isim == yeni).FirstOrDefault();
            }
            else
                e.Cancel = true;
        }

        public override void Yukle()
        {
            if (Id.HasValue)
            {
                entity = MongoAdaptor.Instance.GetDataById<EtkinlikEntity>(Id.AsObjectId);
            }
            else
            {
                entity = new EtkinlikEntity();
                if (EtkinlikKaydi != null)
                {
                    entity.BaslangicTarihi = EtkinlikKaydi.Start;
                    entity.BitisTarihi = EtkinlikKaydi.End;
                    entity.KomisyonId = (ObjectId)EtkinlikKaydi.ResourceId;
                }
                else
                {
                    entity.BaslangicTarihi = DateTime.Now;
                    entity.BitisTarihi = DateTime.Now.AddHours(1);
                    //entity.KomisyonId = (ObjectId)EtkinlikKaydi.ResourceId;
                }
            }

            bsData.DataSource = entity;
        }

        public override void Kaydet()
        {
            MongoAdaptor.Instance.Save<EtkinlikEntity>(entity);
            DialogResult = System.Windows.Forms.DialogResult.OK;
            Close();
        }

        private void baslangicTarihiDateEdit_EditValueChanged(object sender, EventArgs e)
        {
            dateEdit1.DateTime = baslangicTarihiDateEdit.DateTime;
        }

        private void bitisTarihiDateEdit_EditValueChanged(object sender, EventArgs e)
        {
            dateEdit2.DateTime = bitisTarihiDateEdit.DateTime;
        }

        private void gridControlFotograflar_EmbeddedNavigator_ButtonClick(object sender, DevExpress.XtraEditors.NavigatorButtonClickEventArgs e)
        {
            if (e.Button.ButtonType == DevExpress.XtraEditors.NavigatorButtonType.Append)
            {
                byte[] dosya = ResimSec();
                if (dosya != null)
                {
                    layoutView1.AddNewRow();
                    EtkinlikEntity.FotografEntity foto = layoutView1.GetFocusedRow() as EtkinlikEntity.FotografEntity;
                    foto.Fotograf = dosya;
                }
                e.Handled = true;
                layoutView1.MoveLast();
            }
        }

        private byte[] ResimSec()
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "Resim Dosyaları|*.jpg;*.jpeg;*.gif;*.tiff;*.bmp;*.png";

            byte[] result = null;

            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                using (Stream stream = dlg.OpenFile())
                {
                    result = Utilities.FileUtil.ReadToEnd(stream);
                }
            }
            return result;
        }
    }
}
